home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.whtech.com
/
ftp.whtech.com.tar
/
ftp.whtech.com
/
datasheets and manuals
/
Hardware
/
WHT
/
scsi
/
dsr_sources_2_2001
/
delete
< prev
next >
Wrap
Text File
|
2006-10-19
|
5KB
|
199 lines
************************************************************
* *
* DELETE *
* *
* This routine will delete the file specified in the *
* name compare buffer. If the file is open, it will *
* be closed before deleting the file. *
* *
* The following steps are taken. *
* - Check that the file exists *
* - Check that the file is not protected *
* - Remove the entry from the directory and *
* decrement the number of file in the directory *
* - Deallocate all AUs associated with the file. *
* *
************************************************************
DEL0 ANDI R12,>FF00
AI R12,24
LDCR @B02,4 Select RAM bank 2
* First check to see if the file is open
*
BLWP @IFO
JNE DELE20
* OK, the file is open. See if it has the protection bit set
*
MOVB @2(R5),R7 Get bank where FDR is stored
MOV @4(R5),R8 Get address of FDR
MOV @48(R5),R4 Get AU of FDR
CLR @2(R5) Close the file
MOV R8,R5
JMP DELE21
* LDCR R7,4 Select RAM bank where FDR is located
* MOV @12(R8),R0 Get file flags
* COC @PROBIT,R0 Check to see if file is protected
* JEQ DELPRO
*
* LDCR @B02,4 Select bank 2 again
* CLR @2(R5) Close the file
* MOV @48(R5),R0 Save AU of FDR
*
* Copy the FDR to the buffer
*
* LI R2,DFDR
* LI R3,256
*DELE2 LDCR R7,4
* MOV *R8+,R4
* LDCR @B02,4 Select RAM bank 2
* MOV R4,*R2+
* DECT R3
* JNE DELE2
*
* MOV R0,@DFDR Put AU in the delete buffer
* B @DELE50
*
*
* DELPRO - Here is where we error out if we're trying
* to delete a file that is protected
*
DELPRO BL @DSRERR
DATA >0100 File is protected
* We branch to here if the file is not open
*
DELE20 BL @GETFDR See if the file exists
CI R5,0
JEQ DELERR
CLR R7 Bank where FDR is
LDCR @B04,4
MOV @SAVEAU,R4 Get AU of FDR
* See if the file is protected
*
DELE21 LDCR R7,4
MOV @12(R5),R0 Get file flags
COC @PROBIT,R0
JEQ DELPRO
* Copy the FDR to DFDR and store the AU of the FDR in the
* first word.
*
LDCR @B02,4 Save AU of the FDR
MOV R4,@DFDR
DELE22 AI R5,40 Point to data chain
LI R0,216 216 bytes of data chain pointers
LI R1,DFDR+40
DELE23 LDCR R7,4 Select RAM bank 0
MOV *R5+,R2
LDCR @B02,4 Select RAM bank 2
MOV R2,*R1+
DECT R0
JNE DELE23
* JMP DELE50
* Now that we have the Delete FDR (DFDR) buffer all set up,
* delete the actual file
*
*DELE50
* Step 1: Decrement the number of files in the directory
*
BL @GETDDR
CI R5,0 This shouldn't happen, but check anyway
JEQ DELERR
MOV @SAVEAU,R7 Get AU of the parent directory
MOV R6,R3
SRL R3,8
SLA R3,1
MPY @SAUTBL(R3),R7
LI R4,SECBUF
SRL R8,1
JNC DELE51
AI R4,>100
DELE51 SRL R7,1
JNC DELE52
AI R8,>8000
DELE52 LDCR @ZERO,4
BLWP @BANKIT
DATA SCSIRD
JNE DELERR
SB @B01,@22(R4) Decrement # of files
BLWP @BANKIT Write DDR back out
DATA SCSIWT
JNE DELERR
* Now decrement the number in the cache
*
LDCR @B03,4
SB @B01,@22(R5)
* Step 2: Remove AU of the FDR from the index
*
MOV @24(R5),R7
LDCR @B04,4 Select RAM bank 4
MPY @SAUTBL(R3),R7
LI R4,SECBUF
SRL R8,1
JNC DELE53
AI R4,>100
DELE53 SRL R7,1
JNC DELE54
AI R8,>8000
DELE54 LDCR @ZERO,4
BLWP @BANKIT
DATA SCSIRD
JNE DELERR
LDCR @B02,4 Select RAM bank 2
MOV @DFDR,R5 Get AU of the FDR
LDCR @ZERO,4 Select RAM bank 0
DELE55 C *R4+,R5 Is this the AU we're looking for?
JEQ DELE56
CI R4,>5EFE
JEQ DELERR
CI R4,>5FFE
JNE DELE55
* JMP DELE55
DELERR BL @DSRERR
DATA >0700 File error
DELE56 CI R4,>5EFE Do we need to move any more down?
JEQ DELE57
CI R4,>5FFE
JEQ DELE57
MOV *R4,@-2(R4)
INCT R4
JMP DELE56
DELE57 CLR @-2(R4)
BLWP @BANKIT Write index back out to disk
DATA SCSIWT
JNE DELERR
* Now deallocate all AU's the file had used
*
LDCR @B02,4 Select RAM bank 2
MOV @DFDR,R7 Get AU that FDR used to be in
MOV R7,R8
LDCR @ZERO,4 Select RAM bank 0
BLWP @DEALL
LI R4,DFDR+40
DELE58 LDCR @B02,4 Select RAM bank 2
MOV *R4+,R7
JEQ DELE59
MOV *R4+,R8
LDCR @ZERO,4 Select RAM bank 0
BLWP @DEALL
CI R4,DFDR+254 Are we done?
JNE DELE58
DELE59 LDCR @ZERO,4
B @DSRRT